{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Text Classification Using CNN, LSTM and Pre-trained Glove Word Embeddings."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.0\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "print(tf.__version__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import csv\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "from tensorflow.keras.preprocessing.text import Tokenizer\n",
    "from tensorflow.keras.preprocessing.sequence import pad_sequences\n",
    "from nltk.corpus import stopwords\n",
    "STOPWORDS = set(stopwords.words('english'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# vocab_size = 5000\n",
    "embedding_dim = 100\n",
    "max_length = 200\n",
    "trunc_type = 'post'\n",
    "padding_type = 'post'\n",
    "oov_tok = '<OOV>'\n",
    "training_portion = .8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2225\n",
      "2225\n"
     ]
    }
   ],
   "source": [
    "articles = []\n",
    "labels = []\n",
    "\n",
    "with open(\"bbc-text.csv\", 'r') as csvfile:\n",
    "    reader = csv.reader(csvfile, delimiter=',')\n",
    "    next(reader)\n",
    "    for row in reader:\n",
    "        labels.append(row[0])\n",
    "        article = row[1]\n",
    "        for word in STOPWORDS:\n",
    "            token = ' ' + word + ' '\n",
    "            article = article.replace(token, ' ')\n",
    "            article = article.replace(' ', ' ')\n",
    "        articles.append(article)\n",
    "print(len(labels))\n",
    "print(len(articles))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "tokenizer = Tokenizer()\n",
    "tokenizer.fit_on_texts(articles)\n",
    "\n",
    "word_index = tokenizer.word_index\n",
    "vocab_size=len(word_index)\n",
    "\n",
    "sequences = tokenizer.texts_to_sequences(articles)\n",
    "padded = pad_sequences(sequences, maxlen=max_length, padding=padding_type, truncating=trunc_type)\n",
    "\n",
    "train_size = int(len(articles) * training_portion)\n",
    "training_sequences = padded[0:train_size]\n",
    "train_labels = labels[0:train_size]\n",
    "\n",
    "validation_sequences = padded[train_size:]\n",
    "validation_labels = labels[train_size:]\n",
    "\n",
    "label_tokenizer = Tokenizer()\n",
    "label_tokenizer.fit_on_texts(labels)\n",
    "\n",
    "training_label_seq = np.array(label_tokenizer.texts_to_sequences(train_labels))\n",
    "validation_label_seq = np.array(label_tokenizer.texts_to_sequences(validation_labels))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1780, 200)\n",
      "(445, 200)\n",
      "(1780, 1)\n",
      "(445, 1)\n"
     ]
    }
   ],
   "source": [
    "print(training_sequences.shape)\n",
    "print(validation_sequences.shape)\n",
    "print(training_label_seq.shape)\n",
    "print(validation_label_seq.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "29698\n",
      "4624\n"
     ]
    }
   ],
   "source": [
    "print(vocab_size)\n",
    "print(word_index['i'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First, we need to load the entire GloVe word embedding file into memory as a dictionary of word to embedding array. Next, we need to create a matrix of one embedding for each word in the training dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "embeddings_index = {};\n",
    "with open('glove/glove.6B.100d.txt') as f:\n",
    "    for line in f:\n",
    "        values = line.split();\n",
    "        word = values[0];\n",
    "        coefs = np.asarray(values[1:], dtype='float32')\n",
    "        embeddings_index[word] = coefs;\n",
    "\n",
    "embeddings_matrix = np.zeros((vocab_size+1, embedding_dim))\n",
    "for word, i in word_index.items():\n",
    "    embedding_vector = embeddings_index.get(word)\n",
    "    if embedding_vector is not None:\n",
    "        embeddings_matrix[i] = embedding_vector"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The result is a matrix of weights only for words we will see during training."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "29699\n"
     ]
    }
   ],
   "source": [
    "print(len(embeddings_matrix))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can define our model, fit, and evaluate it as before.\n",
    "\n",
    "The key difference is that the embedding layer can be seeded with the GloVe word embedding weights.\n",
    "\n",
    "We do not want to update the learned word weights in this model, therefore we will set the trainable attribute for the model to be False."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_1\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "embedding_1 (Embedding)      (None, 200, 100)          2969900   \n",
      "_________________________________________________________________\n",
      "dropout_1 (Dropout)          (None, 200, 100)          0         \n",
      "_________________________________________________________________\n",
      "conv1d_1 (Conv1D)            (None, 196, 64)           32064     \n",
      "_________________________________________________________________\n",
      "max_pooling1d_1 (MaxPooling1 (None, 49, 64)            0         \n",
      "_________________________________________________________________\n",
      "lstm_1 (LSTM)                (None, 64)                33024     \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 6)                 390       \n",
      "=================================================================\n",
      "Total params: 3,035,378\n",
      "Trainable params: 65,478\n",
      "Non-trainable params: 2,969,900\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model = tf.keras.Sequential([\n",
    "    tf.keras.layers.Embedding(vocab_size+1, embedding_dim, input_length=max_length, weights=[embeddings_matrix], trainable=False),\n",
    "    tf.keras.layers.Dropout(0.2),\n",
    "    tf.keras.layers.Conv1D(64, 5, activation='relu'),\n",
    "    tf.keras.layers.MaxPooling1D(pool_size=4),\n",
    "    tf.keras.layers.LSTM(64),\n",
    "    tf.keras.layers.Dense(6, activation='softmax')\n",
    "])\n",
    "model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 1780 samples, validate on 445 samples\n",
      "Epoch 1/10\n",
      "1780/1780 - 5s - loss: 1.0414 - accuracy: 0.6427 - val_loss: 0.2790 - val_accuracy: 0.9326\n",
      "Epoch 2/10\n",
      "1780/1780 - 2s - loss: 0.3000 - accuracy: 0.9056 - val_loss: 0.2106 - val_accuracy: 0.9483\n",
      "Epoch 3/10\n",
      "1780/1780 - 2s - loss: 0.1706 - accuracy: 0.9478 - val_loss: 0.2265 - val_accuracy: 0.9191\n",
      "Epoch 4/10\n",
      "1780/1780 - 2s - loss: 0.1728 - accuracy: 0.9438 - val_loss: 0.1207 - val_accuracy: 0.9640\n",
      "Epoch 5/10\n",
      "1780/1780 - 2s - loss: 0.1227 - accuracy: 0.9657 - val_loss: 0.1596 - val_accuracy: 0.9506\n",
      "Epoch 6/10\n",
      "1780/1780 - 2s - loss: 0.1201 - accuracy: 0.9624 - val_loss: 0.1224 - val_accuracy: 0.9640\n",
      "Epoch 7/10\n",
      "1780/1780 - 2s - loss: 0.0989 - accuracy: 0.9697 - val_loss: 0.0992 - val_accuracy: 0.9640\n",
      "Epoch 8/10\n",
      "1780/1780 - 2s - loss: 0.1117 - accuracy: 0.9663 - val_loss: 0.1191 - val_accuracy: 0.9596\n",
      "Epoch 9/10\n",
      "1780/1780 - 2s - loss: 0.1620 - accuracy: 0.9433 - val_loss: 0.1314 - val_accuracy: 0.9438\n",
      "Epoch 10/10\n",
      "1780/1780 - 2s - loss: 0.0848 - accuracy: 0.9725 - val_loss: 0.0792 - val_accuracy: 0.9753\n"
     ]
    }
   ],
   "source": [
    "num_epochs = 10\n",
    "history = model.fit(training_sequences, training_label_seq, epochs=num_epochs, validation_data=(validation_sequences, validation_label_seq), verbose=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_graphs(history, string):\n",
    "  plt.plot(history.history[string])\n",
    "  plt.plot(history.history['val_'+string])\n",
    "  plt.xlabel(\"Epochs\")\n",
    "  plt.ylabel(string)\n",
    "  plt.legend([string, 'val_'+string])\n",
    "  plt.show()\n",
    "  \n",
    "plot_graphs(history, \"accuracy\")\n",
    "plot_graphs(history, \"loss\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
